package com.yhao.simpledemo.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.util.Date;
import java.util.List;
import java.util.Map;


/**
 * <p>功能描述: [JSON工具类]</p>
 *
 * @author yhao
 * @date:2014-11-6/下午1:41:04
 * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
 */
public class JsonUtil {


    /**
     * <p>功能描述:[字符串转对象]</p>
     *
     * @param jsonString
     * @param clazz
     * @return
     * @author:yhao
     * @date:2014-11-6/上午11:28:02
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    @SuppressWarnings("unchecked")
    public static Object jsonToObject(String jsonString, Class clazz) {
        if (jsonString == null || "".equals(jsonString)) {
            return null;
        }
        return JSON.parseObject(jsonString, clazz);
    }


    /**
     * <p>功能描述:[对象转json]</p>
     *
     * @param object
     * @return
     * @author:yhao
     * @date:2014-11-6/上午11:28:51
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public static String objectToJson(Object object) {
        if (object == null) {
            return "";
        }
        return JSON.toJSONString(object);
    }

    /**
     * <p>功能描述:[list转json]</p>
     *
     * @param list
     * @return
     * @author:yhao
     * @date:2014-11-6/上午11:29:15
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public static String listToJson(List<Object> list) {
        if (list == null) {
            return "";
        }
        return JSON.toJSONString(list);
    }

    /**
     * <p>功能描述:[方法功能中文描述]</p>
     *
     * @param jsonString
     * @return
     * @author:yhao
     * @date:2014-11-6/上午11:29:33
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public static List<Object> jsonToList(String jsonString) {
        if (jsonString == null || "".equals(jsonString)) {
            return null;
        }
        return JSON.parseObject(jsonString, new TypeReference<List<Object>>() {
        });
    }

    /**
     * <p>功能描述:[字符串转map]</p>
     *
     * @param jsonString
     * @return
     * @author:yhao
     * @date:2014-11-6/上午11:35:03
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public static Map<String, Object> jsonToMap(String jsonString) {
        if (jsonString == null || "".equals(jsonString)) {
            return null;
        }
        return JSON.parseObject(jsonString, new TypeReference<Map<String, Object>>() {
        });
    }

    //6 : map --> string

    /**
     * <p>功能描述:[map转化为字符串]</p>
     *
     * @param map
     * @return
     * @author:yhao
     * @date:2014-11-6/上午11:35:36
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public static String mapToJson(Map map) {
        if (map == null) {
            return null;
        }
        return JSON.toJSONString(map);
    }


    // 7 : list<map<String,Object>> --> string

    /**
     * <p>功能描述:[复杂对象转化为字符串]</p>
     *
     * @param list
     * @return
     * @author:yhao
     * @date:2014-11-6/上午11:36:10
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public static String mixedTypeToJson(List<Map<String, Object>> list) {
        if (list == null || list.size() < 1) {
            return null;
        }

        return JSON.toJSONString(list);
    }

    // 8: string -->list<map<String,Object>>

    /**
     * <p>功能描述:[字符串转化为复杂对象]</p>
     *
     * @param jsonString
     * @return
     * @author:yhao
     * @date:2014-11-6/上午11:36:37
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public static List<Map<String, Object>> jsonToMixedType(String jsonString) {
        if (jsonString == null || "".equals(jsonString)) {
            return null;
        }
        return JSON.parseObject(jsonString, new TypeReference<List<Map<String, Object>>>() {
        });
    }
    // 9:  date --> string

    /**
     * <p>功能描述:[把日期转化成标准格式的字符串]</p>
     *
     * @param date
     * @return "yyyy-MM-dd HH:mm:ss"
     * @author:yhao
     * @date:2014-11-6/上午11:37:01
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public static String dateFormatToJson(Date date) {
        if (date == null) {
            return "";
        }
        return JSON.toJSONString(date, SerializerFeature.WriteDateUseDateFormat);
    }

    /**
     * <p>功能描述:[日期转化成指定格式的字符串]</p>
     *
     * @param date
     * @param format
     * @return
     * @author:yhao
     * @date:2014-11-6/上午11:37:55
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public static String dateFormatToJson(Date date, String format) {
        if (date == null) {
            return "";
        }
        return JSON.toJSONStringWithDateFormat(date, format, SerializerFeature.WriteDateUseDateFormat);
    }

}
